import jieba
from gensim import corpora  # 对数据提取特征，并产生特征
from gensim import models  # 模板
from gensim import similarities  # 匹配操作，相似度匹配

'''队训练数据进行预处理'''
def getfeatures(a,l1):
    all_doc_list=[]
    for doc in l1:
        doc_list=[word for word in jieba.cut(doc)]
        all_doc_list.append(doc_list)
    doc_test_list = [word for word in jieba.cut(a)]
    '''制作词袋'''
    dictionary = corpora.Dictionary(all_doc_list)
    '''数字化'''
    dictionary.token2id
    '''语科库'''
    corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
    '''对测试数据进行处理'''
    doc_test_vec = dictionary.doc2bow(doc_test_list)
    corpus.append(dictionary.keys())
    prinresult(corpus)
    return corpus,dictionary,doc_test_vec

'''输出结果'''
def prinresult(sim,l1,a):
    '''对小标和相似度结果进行一个排序，拿出相似度最高的结果'''
    cc = sorted(enumerate(sim), key=lambda item: item[1], reverse=True)
    txt = 11[cc[0][0]]
    print(a,'和：',txt,'匹配度最高')

'''主函数'''
def main():
    '''训练内容'''
    l1=["我是上海人", "上海人", "上海今天天气不错", "上海人在吃饭"]
    '''训练数据'''
    a="我家在上海，我是上海人"
    corpus,doc_test_vec=getfeatures(a,l1)
    lsi = models.LsiModel(corpus)
    '''稀疏矩阵相似度将主语科库corpus的训练成果 作为初始化'''
    index = similarities.SparseMatrixSimilarity(lsi[corpus[0:len(l1)]], num_features=len())
    '''将语科库doc_test_vec在语科库corpus的训练成果中的向量表示与语科库corpus的向量表示，做矩阵相似度计算'''
    sim = index[lsi[doc_test_vec]]
    prinresult(sim,11,a)
main()
